home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 1996 April
/
CHIP 1996 aprilis (CD06).zip
/
CHIP_CD06.ISO
/
hypertxt.arj
/
9412
/
ONEHALF.CD
< prev
next >
Wrap
Text File
|
1994-11-27
|
12KB
|
184 lines
@VONE HALF@N
@VSzomszéd vírus@N
A vírusok rendszerint megfertôznek minden programfile-t
a merevlemezen, s valamilyen módon aktivizálják a
bennük rejlô romboló algoritmust, ami rövid idô alatt
megsemmisít mindent, amit a merevlemezen tároltunk.
A pusztítás után rövid dühkitörés, csapkodás, majd a
rendszer újbóli telepítése.
Az alábbiakban egy valószínûleg szlovákiából származó, 3544
byte hosszúságú vírus kerül terítékre. A vírust a benne
található szignatúra alapján ONE HALF-nak nevezték el. A
@Kmiért@N, már ami a név mivoltát illeti, a cikk végére
világossá válik.
Ez a vírus is egy vírust tartalmazó programfile
elindításával fertôz. Elsôként megmenti önmagától a
partíciós táblát és partíciós programot tartalmazó
szektort, majd egy rövidke programmal felülírja a partíciós
programot. Ez a program tölti be magát a vírust. Második
lépése: a vírus elhelyezése a megfelelô helyen. Normál
esetben ez egy másik file vagy a memória lenne, de mivel a
vírus(író) rafinált, a vírustörzset a 0. cylinder 0.
oldalának utolsó hét szektorába írja be. Magyarul DOS
partíción kívül helyezi el a bacilus lényegét. Még néhány
merevlemez-függô paramétert beállít, majd átadja a
vezérlést az eredeti programnak.
A vírus aktivizálódása a következô rendszertöltéskor
történik. A partíciós program helyén lévô program betölti
és elindítja a vírust. Önmagára írja a hexadecimális 13, 1C
megszakításokat, majd vár. Hogy mire? ...nem másra, mint a
hexadecimális 21-es megszakításra. Az 1C megszakítás
másodpercenként tizennyolcszor kerül meghívásra, s minden
meghívásakor ellenôrzi a 21-es megszakítás címét abban az
esetben, ha ez a cím nagyobb, mint nulla, azaz ha már
aktivizálta az IBMDOS.COM/MSDOS.SYS file ezt a
megszakítást, akkor önmagára irányítja, az 1C-t pedig
visszaírja. Mire a rendszer teljesen betöltôdik, a vírus
beépül néhány megszakításba, hogy a lemezkezelô funkciókat
teljes mértékben felügyelje. Egy mezei vírus ezen a ponton
kezdi el fertôzni a merevlemezen található
programfile-okat. A ONE HALF-nak ez nem célja, mivel már
felügyeli a fontosabb funkciókat. De mit csinál, ha nem a
merevlemezre írogatja sajátmagát? A válasz nagyon egyszerû,
minden programot megfertôz, amit nem a merevlemezen
indítunk el, vagy amit például floppyra másolunk. A lényeg
tehát az, hogy olyan adathordozóra kerüljön a vírus,
amelyikkel bekerülhet az információáramba, azaz egy másik
gépre juthat, s ott tovább fertôzhet.
Ha netán gyanút fog egy felhasználó és felfedezi gépén a
vírus garázdálkodását, elsô reakciója nem más, mint az
általa ismert víruskeresôk ráengedése a merevlemezre. Abban
az esetben, ha nem heurisztikus víruskeresôvel próbálkozik,
esélye sincs, ugyanis ez a vírus mutálódik. Nem egyszerû
regisztermutációról van szó, ez ugyanis rövid úton
megfogható lenne. A vírus utasításmutációt használ, ami azt
jelenti, hogy nemcsak a regisztereket cserélgeti. Minden
fertôzéskor más és más utasításokat helyez el eltérô
sorrendben az új példányban. Szekvencia keresôvel
nyilvánvalóan nem találnánk meg a vírust. A heurisztikus
keresônek is utasításanalizálást kell végeznie. Fel kell
ismernie a vírust kititkosító ciklust, ami egy egyszerûbb
vírus esetében nem is jelent nehézséget. Az 1. ábra
tartalmaz egy rövidke titkosító ciklust, amit általában a
vírusok használni szoktak. A 2. ábra a ONE HALF kititkosító
ciklusát tartalmazza. Van egy igen furcsa dolog ebben a
ciklusban, mégpedig az, hogy minden esetben a hordozó
programban helyezkedik el, azaz a vírus nem egyszerûen
hozzáíródik a file-hoz, hanem tíz különbözô helyrôl tíz
byte-ot kiemel és elment a gazdaprogramból, s ezek helyére
teszi a kititkosító ciklust. Tehát a ciklus nem fizikailag
egymás után elhelyezkedô utasításokból áll, így azok a
heurisztikus keresôk sem találják meg, amelyek csak az
egymásután elhelyezkedô utasításokat vizsgálják.
Miután keresni és irtani is tudjuk a vírust, nekilátunk
a merevlemez megtisztításához. Tiszta rendszerlemezrôl
töltünk operációs rendszert, ellenôrizzük a
partíciósprogramot. Mivel észrevesszük, hogy nem egyezik az
eredetivel, megoldjuk a problémát egy @KFDISK /MBR@N
paranccsal, ami felülírja a fertôzött programot egy
tisztával. Következô lépés a file-ok megszabadítása a
vírusoktól. Miután ezt befejeztük, mint aki jól végezte
dolgát, kivesszük a rendszerlemezt, és betöltjük a
merevlemezen lévô operációs rendszert.
Itt logikusan az elsô parancs a CHKDSK. Meglepetésre
rengeteg elveszett cluster-t jelez, ami nem véletlen, hisz
a vírusnak -- tudtunkon kívül volt egy rossz és egy jó
tulajdonsága. A rossz, hogy minden rendszerindításkor
eltitkosított két cylindert a merevlemezünkbôl. A jó, hogy
amíg a vírus aktív, ezt vissza is konvertálja, ha olvasunk
ezekrôl a helyekrôl. Mivel minden indításkor több az
eltitkosított rész a merevlemezbôl, így egyszer csak
elérkezik az az idô, amikor egy jól sikerült vírusírtással
megszabadulunk a teljes merevlemez tartalomtól is. A vírus
ugyanis a merevlemez végétôl visszafelé titkosít, és azt,
hogy éppen melyik cylindertôl van átbuherálva a merevlemez,
a fertôzött partíciós program tartalmazta addig, amíg a
bosszútól vezérelve felül nem írtuk.... Némi jóindulat is
szorult a vírus írójába, ugyanis ha a merevlemez felét már
eltitkosította a vírus, néhányszor kiírja üzenetét a
képernyôre.
Sajnos a vírusnak van hibája is, mivel a vírusos rendszerbe
bekerülô, azonos vírussal fertôzött programokról nem szedi
le a kórokozót. Remélhetôleg a vírusírók is ugyanazt a
szisztémát követik, mint a nagy aklakgyártó cég: egy
következô verzió már nem tartalmazza ugyanazt a BUG-ot.
@VDarvas Årpád@N
┌──────────────────────────────────────────────────────────┐
│ @V1. ábra@N │▒
│ │▒
│ CS:23E MOV CX, 13CD │▒
│ CS:240 XOR CS:[BX], AX │▒
│ CS:243 INC BX │▒
│ CS:244 INC BX │▒
│ CS:245 LOOP 240 │▒
└──────────────────────────────────────────────────────────┘▒
▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
┌──────────────────────────────────────────────────────────┐
│ @V2. ábra@N │▒
│ │▒
│ CS:B456 STI │▒
│ CS:B457 CLC │▒
│ │▒
│ CS:B458 MOV BP, 1234 │▒
│ CS:B46A JMP B900 │▒
│ . │▒
│ . │▒
│ CS:B900 STC │▒
│ │▒
│ CS:B901 MOV SI, 0076 │▒
│ CS:B905 JMP B312 │▒
│ . │▒
│ . │▒
│ CS:B312 PUSH CS │▒
│ CS:B313 POP DS │▒
│ │▒
│ CS:B314 CLI │▒
│ │▒
│ CS:B315 XOR [SI], BP │▒
│ CS:B317 JMP B678 │▒
│ . │▒
│ . │▒
│ CS:B678 POP AX │▒
│ CS:B679 PUSH AX │▒
│ CS:B67A ADD BP, 0987 │▒
│ CS:B67D JMP BC09 │▒
│ . │▒
│ . │▒
│ CS:BC09 INC SI │▒
│ │▒
│ CS:BC0A STI │▒
│ CS:BC0B CLD │▒
│ │▒
│ CS:BC0D JMP B100 │▒
│ . │▒
│ . │▒
│ CS:B100 CMP SI, 2345 │▒
│ │▒
│ CS:B104 STD │▒
│ │▒
│ CS:B105 JMP B360 │▒
│ . │▒
│ . │▒
│ CS:B360 JNE B315 │▒
│ │▒
│ CS:B365 STI │▒
│ │▒
│ CS:B366 JMP VìRUS │▒
└──────────────────────────────────────────────────────────┘▒
▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒